/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 *
 */
package co.gov.medellin.sdep.sisdep.domain;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import co.gov.medellin.sdep.sisdep.common.AppConstants;
import co.gov.medellin.sdep.sisdep.domain.gestion.ConceptoInicialController;
import co.gov.medellin.sdep.sisdep.gestion.exception.SolicitudException;
import co.gov.medellin.sdep.sisdep.model.FeriaArtesanal;
import co.gov.medellin.sdep.sisdep.regulacion.exception.FeriaArtesanalException;
import co.gov.medellin.sdep.sisdep.regulacion.exception.FeriaArtesanalRuntimeException;
import co.gov.medellin.sdep.sisdep.regulacion.service.IFeriaArtesanalService;

/**
 * @author Usuario
 * 
 */
public class FeriaArtesanalController extends SolicitudBaseController implements
		Serializable {

	/**
	 * generated serial version
	 */
	private static final long serialVersionUID = -3285110767384990403L;

	/**
	 * Constructor por defecto, inicializa los elemento basicos del Controlador
	 */
	public FeriaArtesanalController() {
		this.feriaArtesanalListModel = new ListDataModel();
	}

	/** bean para el manejo del formulario de busqueda FeriaArtesanal */
	private FeriaArtesanal feriaArtesanalSearch = new FeriaArtesanal();

	/** Objeto contenedor del listado de FeriaArtesanal luego de una consulta. */
	private transient DataModel feriaArtesanalListModel;

	private transient DataModel feriaCritValoracionListModel;
	
	private transient DataModel feriaEvalPartListModel;
	/** bean para el manejo del formulario de creacion/edicion. FeriaArtesanal */
	private FeriaArtesanal feriaArtesanal = new FeriaArtesanal();

	/** instancia de servicio feriaArtesanalService */
	private IFeriaArtesanalService feriaArtesanalService;
	
	FeriaCritValoracionController feriaCritValoracionController;

	FeriaEvalPartController feriaEvalPartController;
	
	ConceptoInicialController conceptoInicialController;


	// --------------------------------------------------------------------
	// --- metodos para atender acciones init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public void init(Long solicitudId) throws SolicitudException, FeriaArtesanalException {
		//cleanSearchValues();
		this.solicitud = getSolicitudService().get(solicitudId.longValue());
		this.feriaArtesanal = getFeriaArtesanalService().getFeriaArtesanalRelatedBy(solicitudId.longValue());
		if(this.feriaArtesanal == null){
			this.feriaArtesanal = new FeriaArtesanal();
			//cleanValues();
			this.feriaArtesanal.setIdSolicitud(solicitudId);
		}
	}

	/**
	 * 
	 * @return String
	 */
	public String searchFeriaArtesanalByKey() {
		String msg = "";
		try {
			List valores = null;				
			valores = getFeriaArtesanalService().loadByKey(1, 10,
					this.feriaArtesanalSearch);
			this.feriaArtesanalListModel.setWrappedData(valores);
		} catch (Exception e) {
			msg = e.getMessage();
			e.printStackTrace(System.err);
		}
		if (this.feriaArtesanalListModel.getWrappedData() == null) {
			msg = AppConstants.NO_RECORDS_FOUND;
		} else {
			if (((List) this.feriaArtesanalListModel.getWrappedData()).isEmpty()) {
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		}
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage(msg, null, null);
		return AppConstants.FERIAARTESANAL_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String create() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.feriaArtesanal.getId().longValue() == 0L) {				
				feriaArtesanal.setIdTipoFeria(new Long(feriaArtesanal.getIdTipoFeriaStr()));
				feriaArtesanal.setCantidadToldos(new Long(feriaArtesanal.getCantidadToldosStr()));
				getFeriaArtesanalService().insert(this.feriaArtesanal);
				msg = AppConstants.SUCCESS_CREATE;
			}
		} catch (FeriaArtesanalException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (FeriaArtesanalRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Feria Artesanal " + msg, null, null);
		return this.solicitudDestinoRedirectPage;
	}

	/**
	 * 
	 * @return
	 */
	public String update() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.feriaArtesanal.getId() == null) {
				feriaArtesanal.setIdTipoFeria(new Long(feriaArtesanal.getIdTipoFeriaStr()));
				getFeriaArtesanalService().insert(this.feriaArtesanal);
				feriaArtesanal.setCantidadToldos(new Long(feriaArtesanal.getCantidadToldosStr()));
				msg = AppConstants.SUCCESS_CREATE;
			}
			if (this.feriaArtesanal.getId() != null) {
				feriaArtesanal.setIdTipoFeria(new Long(feriaArtesanal.getIdTipoFeriaStr()));
				feriaArtesanal.setCantidadToldos(new Long(feriaArtesanal.getCantidadToldosStr()));
				getFeriaArtesanalService().update(this.feriaArtesanal);
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (FeriaArtesanalException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (FeriaArtesanalRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Feria Artesanal " + msg, null, null);
		return this.solicitudDestinoRedirectPage;
	}

	// --------------------------------------------------------------------
	// --- metodos para atender acciones end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public String createFeriaArtesanal() {
		feriaArtesanal = new FeriaArtesanal();
		feriaArtesanal.setId(new Long(0L));
		//feriaArtesanal.setValor("");
		//feriaArtesanal.setActivo("N");
		this.solicitudDestinoRedirectPage = AppConstants.FERIAARTESANAL_SEARCH_VIEW;
		return AppConstants.FERIAARTESANAL_CREATE_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String updateFeriaArtesanal() {
		Map params = getExternalContext().getRequestParameterMap();
		String feriaArtesanalDataIndex = (String) params
				.get("feriaArtesanalDataIndex");
		this.feriaArtesanal = (FeriaArtesanal) ((List) this.feriaArtesanalListModel
				.getWrappedData())
				.get(Integer.parseInt(feriaArtesanalDataIndex));
		this.solicitudDestinoRedirectPage = AppConstants.FERIAARTESANAL_SEARCH_VIEW;
		return AppConstants.FERIAARTESANAL_UPDATE_VIEW;
		
	}
	/**
	 * 
	 * @return
	 */
	public String valoracionFeriaArtesanal() {
		Map params = getExternalContext().getRequestParameterMap();
		String feriaArtesanalDataIndex = (String) params
				.get("feriaArtesanalDataIndex");
		this.feriaArtesanal = (FeriaArtesanal) ((List) this.feriaArtesanalListModel
				.getWrappedData())
				.get(Integer.parseInt(feriaArtesanalDataIndex));
			
		int operacion = getFeriaCritValoracionController().searchFeriaCritValoracionByKey1(feriaArtesanal.getId(),getFeriaCritValoracionController().getFeriaCritValoracionService());		
		if(operacion==0){			
			getFeriaCritValoracionController().createFeriaCritValoracion();
			getFeriaCritValoracionController().feriaCritValoracion.setIdFeriaArtesanal(feriaArtesanal.getId());			
			return AppConstants.FERIACRITVALORACION_CREATE_VIEW;
		}
		else{
			getFeriaCritValoracionController().updateFeriaCritValoracion(); 
			return AppConstants.FERIACRITVALORACION_UPDATE_VIEW;
		}

	}

	public String conclusionesFeriaArtesanal() {
		Map params = getExternalContext().getRequestParameterMap();
		String feriaArtesanalDataIndex = (String) params
				.get("feriaArtesanalDataIndex");
		this.feriaArtesanal = (FeriaArtesanal) ((List) this.feriaArtesanalListModel
				.getWrappedData())
				.get(Integer.parseInt(feriaArtesanalDataIndex));
			
		int operacion = getFeriaEvalPartController().searchFeriaEvalPartByIdFeria(feriaArtesanal.getId(),getFeriaEvalPartController().getFeriaEvalPartService());		
		if(operacion==0){			
			getFeriaEvalPartController().createFeriaEvalPart();
			getFeriaEvalPartController().feriaEvalPart.setIdFeriaArtesanal(feriaArtesanal.getId());			
			return AppConstants.FERIAEVALPART_CREATE_VIEW;
		}
		else{
			getFeriaEvalPartController().updateFeriaEvalPart(); 
			return AppConstants.FERIAEVALPART_UPDATE_VIEW;
		}

	}
	
	public String conceptoInicialFeria() {
		Map params = getExternalContext().getRequestParameterMap();
		String feriaArtesanalDataIndex = (String) params
				.get("feriaArtesanalDataIndex");
		this.feriaArtesanal = (FeriaArtesanal) ((List) this.feriaArtesanalListModel
				.getWrappedData())
				.get(Integer.parseInt(feriaArtesanalDataIndex));
							
		//getConceptoInicialController().conceptoInicialSearch.setIdSolicitud(feriaArtesanal.getIdSolicitud());
		//Desabilitado POR PRUEBAS ALAMBRADO
		//getConceptoInicialController().conceptoInicialSearch.setRadicado(feriaArtesanalSearch.getRadicado());
		//getConceptoInicialController().searchConceptoInicialByKey(feriaArtesanalSearch.getRadicado(), getConceptoInicialController().getConceptoInicialService());		
		return AppConstants.CONCEPTO_INICIAL_SEARCH_VIEW;
	}
	
	
	/**
	 * 
	 * @return
	 */
	public String cancelFeriaArtesanal() {
		return AppConstants.FERIAARTESANAL_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String cancelFeriaArtesanalOpcion() {
		return AppConstants.FERIAARTESANAL_MENU_VIEW;
	}
	
	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- getters and setters init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public FeriaArtesanal getFeriaArtesanalSearch() {
		return feriaArtesanalSearch;
	}

	/**
	 * 
	 * @param feriaArtesanalSearch
	 */
	public void setferiaArtesanalSearch(FeriaArtesanal feriaArtesanalSearch) {
		this.feriaArtesanalSearch = feriaArtesanalSearch;
	}

	/**
	 * 
	 * @return
	 */
	public DataModel getferiaArtesanalListModel() {
		return feriaArtesanalListModel;
	}

	/**
	 * 
	 * @param feriaArtesanalListModel
	 */
	public void setferiaArtesanalListModel(DataModel feriaArtesanalListModel) {
		this.feriaArtesanalListModel = feriaArtesanalListModel;
	}

	/**
	 * 
	 * @return
	 */
	public FeriaArtesanal getFeriaArtesanal() {
		return feriaArtesanal;
	}

	/**
	 * 
	 * @param feriaArtesanal
	 */
	public void setferiaArtesanal(FeriaArtesanal feriaArtesanal) {
		this.feriaArtesanal = feriaArtesanal;
	}

	/**
	 * obtencion del servicio feriaArtesanalService
	 * 
	 * @return
	 */
	public IFeriaArtesanalService getFeriaArtesanalService() {
		return feriaArtesanalService;
	}

	/**
	 * establecimiento del servicio feriaArtesanalService, la inyeccion de la
	 * dependencia la cubre SpringFramework
	 * 
	 * @param feriaArtesanalService
	 */
	public void setFeriaArtesanalService(
			IFeriaArtesanalService feriaArtesanalService) {
		this.feriaArtesanalService = feriaArtesanalService;
	}

	public FeriaCritValoracionController getFeriaCritValoracionController() {
		return feriaCritValoracionController;
	}

	public void setFeriaCritValoracionController(
			FeriaCritValoracionController feriaCritValoracionController) {
		this.feriaCritValoracionController = feriaCritValoracionController;
	}

	public FeriaEvalPartController getFeriaEvalPartController() {
		return feriaEvalPartController;
	}

	public void setFeriaEvalPartController(
			FeriaEvalPartController feriaEvalPartController) {
		this.feriaEvalPartController = feriaEvalPartController;
	}

	public ConceptoInicialController getConceptoInicialController() {
		return conceptoInicialController;
	}

	public void setConceptoInicialController(
			ConceptoInicialController conceptoInicialController) {
		this.conceptoInicialController = conceptoInicialController;
	}



	// --------------------------------------------------------------------
	// --- getters and setters end()
	// --------------------------------------------------------------------

}
